Context
今天受 MJ 老师吩咐,测试 MJExtension 对于不规范的 JSON 的解析情况.特记录于此
说明几点
何为不规范
我说的不规则指的是有一定容错能力,但是前提还是 JSON,弄些乱七八糟的字符串就没有意义了哈.比如说,这次我想测试的是前一段事件遇到的一个小问题:服务端返回的是类似这样的一个结果:
为了展现,截图是规范的 JSON,服务端给我的实际数据是:
两个箭头指向处还有 "
.
换句话说,他是严格执行的: "键":"无论啥类型"
. 网上大多数的所谓的 JSON 格式校验工具认为这种格式是 okay 的,但是它的问题是,没法继续”钻下去” ,这里就是我所说的 “不规范”.
说到这里,推荐个地址 在线校验,这个不仅仅是校验,还有格式化功能.支持按层级折叠和展开.
准备工作
- 更新 podfile ,以获取最新的 MJExtension 代码.
- 因为现在服务端已经更改,所以才用从本地文件读取的方式,新建一个 json 文件,放到沙盒中.测试数据已经分享到 百度网盘
链接: http://pan.baidu.com/s/1qWA1Na8 密码: dvwb
大家也可以使用自己的数据进行测试,毕竟就是加两个英文引号.
测试
无引号版本(规范的 JSON )
1 | NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); |
lldb 看到 data 有数据,说明读取正常,一路断点的也都有值,最后数据正常读取显示.
2.有引号版本
在我的文件中的:这两个位置,用引号括起来.即 json 这个 key,对应的有 “ 的 value .
现在拿到数据到刚刚推荐的网址上,结果提示:
继续跑代码:
结果:
data 有值.
自带的 JSON 解析结果为 nil
MJExtension 之后,模型的四个属性为nil (MJ老师也说了,MJExtension 基于苹果自带的 API )
好了,因为暂时遇到的情况就这一个.所以就采取个案例做个小测试.算是完成了老师的嘱托啊~~
后记:
当时服务端正在忙着做其他事情,没有时间给我改返回的格式.所以才用了分次解析的方式.先拿到 json 的 value 值,然后从这一层开始使用 MJExtension ,也完成了任务.
如果有可能,大家按照统一的规范进行开发,是最省时省力又舒畅的.